

package tables

import (
	"fmt"
	"game/game-design/loader"
	"strings"
	ministruct "sanguo/sanguo-design/src/ministruct"
)


var ItemTable *ItemTableStruct = &ItemTableStruct{}

type ItemTableStruct struct {
	loader.DesignTable[ItemCfg]
	
	idIndex map[string]*ItemCfg
	
	
	
}

func (t *ItemTableStruct) FileName() string {
	return "1D道具表_道具"
}

// 从索引中获取对象，获取不到会抛异常
func (t *ItemTableStruct) GetInIdIndex(
	id int32,
) *ItemCfg {
	key :=
		fmt.Sprint(id)
	
	cfg, ok := t.idIndex[key]
	if !ok {
		panic("ItemTable when GetInIdIndex use key not found " + key)
	}
	return cfg
}

// 从索引中查找对象，获取不到会返回null
func (t *ItemTableStruct) FindInIdIndex(
	id int32,
) (*ItemCfg, bool) {
	key :=
		fmt.Sprint(id)
	
	cfg, ok := t.idIndex[key]
	return cfg, ok
}

// 加载idIndex索引
func (t *ItemTableStruct) loadIdIndex() {
	idIndex := make(map[string]*ItemCfg)
	for _, v := range t.All() {
		keys := []string {
			fmt.Sprint(v.id),
		}
		key := strings.Join(keys, "_")
		_, exist := idIndex[key]
		if exist {
			fmt.Println(t.FileName(), " found duplicate key ", key, " in index ", "idIndex")
			continue
		}
		idIndex[key] = v
	}
	t.idIndex = idIndex
}



func (t *ItemTableStruct) LoadAutoGenerate() {
	//加载索引
	t.loadIdIndex()

	
}



type ItemCfg struct {
	id int32 //道具id
	name string //道具名称
	logicType int32 //逻辑类型
	logicParam []int32 //逻辑处理参数
	quality int32 //品质
	useType int32 //使用类型
	useParam []int32 //使用类型参数
	randType []int32 //快捷随机
	maxStack int32 //最大叠加数
	minUseLevel int32 //最低使用等级
	maxUseLevel int32 //最大使用等级
}
// 道具id
func (c *ItemCfg) GetId() int32 {
	return c.id
}
// 道具名称
func (c *ItemCfg) GetName() string {
	return c.name
}
// 逻辑类型
func (c *ItemCfg) GetLogicType() int32 {
	return c.logicType
}
// 逻辑处理参数
func (c *ItemCfg) GetLogicParam() []int32 {
	return c.logicParam
}
// 品质
func (c *ItemCfg) GetQuality() int32 {
	return c.quality
}
// 使用类型
func (c *ItemCfg) GetUseType() int32 {
	return c.useType
}
// 使用类型参数
func (c *ItemCfg) GetUseParam() []int32 {
	return c.useParam
}
// 快捷随机
func (c *ItemCfg) GetRandType() []int32 {
	return c.randType
}
// 最大叠加数
func (c *ItemCfg) GetMaxStack() int32 {
	return c.maxStack
}
// 最低使用等级
func (c *ItemCfg) GetMinUseLevel() int32 {
	return c.minUseLevel
}
// 最大使用等级
func (c *ItemCfg) GetMaxUseLevel() int32 {
	return c.maxUseLevel
}

func ItemTableStructNoUse() {
	fmt.Println(ministruct.Cost{})
}
